class TreePath {
private:
    vector<int> path;
    vector<vector<int>> res;

public:
    vector<vector<int>> allPath(TreeNode* root) {
        dfs(root);
        return res;
    }

private:
    void dfs(TreeNode* node) {
        if (node == nullptr) {
            return;
        }

        // 递的时候：将当前节点值加入到路径
        path.push_back(node->val);

        if (node->left == nullptr && node->right == nullptr) {
            res.push_back(path);
        }

        dfs(node->left);
        dfs(node->right);

        // 回溯
        // 归的时候：将当前节点从当前路径中删除
        path.pop_back();
    }
};